package com.kingPadStudy.tools;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

import com.kingPadStudy.constant.Constant;



/**
 * 程序所用工具包
 * @author lenovo
 *
 */
public class Util {
	
	/**
    * 该函数的功能为解压ZIP文件到指定的目录下。
    * @throws Exception
    */
    public int upZipFile(File zipFile, String folderPath)throws ZipException,IOException {
            ZipFile zfile=new ZipFile(zipFile);
            @SuppressWarnings("rawtypes")
			Enumeration zList=zfile.entries();
            ZipEntry ze=null;
            
            byte[] buf=new byte[1024];
            while(zList.hasMoreElements()){
            	
                ze=(ZipEntry)zList.nextElement();
                if(ze.isDirectory()){
                    String dirstr = folderPath + ze.getName();
                    dirstr = new String(dirstr.getBytes());
                    File f=new File(dirstr);
                    f.mkdir();
                    continue;
                } // if

                OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(folderPath, ze.getName())));
                InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
                
                int readLen=0;
                while ((readLen=is.read(buf, 0, 1024))!=-1) {
                    os.write(buf, 0, readLen);
                }
                is.close();
                os.close();
            }
        zfile.close();
        return 0;
    }

    /**
    * 给定根目录，返回一个相对路径所对应的实际文件名.
    * @param baseDir 指定根目录
    * @param absFileName 相对路径名，来自于ZipEntry中的name
    * @return java.io.File 实际的文件
    */
    public static File getRealFileName(String baseDir, String absFileName){
        String[] dirs=absFileName.split("/");
        File ret=new File(baseDir);
        String substr = null;
        if(dirs.length>1){
            for (int i = 0; i < dirs.length-1;i++) {
                substr = dirs[i];
                substr = new String(substr.getBytes());
                ret=new File(ret, substr);

            }
            
            if(!ret.exists())
                    ret.mkdirs();
            
            substr = dirs[dirs.length-1];
			 substr = new String(substr.getBytes());

            ret=new File(ret, substr);
            return ret;
        }

        return ret;
    }
    
    /**
     * 用于解析是判断该图片是应用程序目录还是当前目录下
     * @param path ： 当前目录程序path
     * @param text ： 获取到的图片相对path路径
     * @return ：图片数据的真实path
     */
    public static String dealResPath(final String path, String text) {
		
		if(text != null && text.contains("app:/")) {
			return text.replaceAll("app:/", Constant.KING_PAD_RES);
		}
		
		return path + "/" + text;
	}
}
